package singleton;

/**
 * 简单单例模式
 *
 * 单例的懒加载 & 提前加载:
 * 1. 加载时机和JVM有关
 * 2. Java语言并没有提供一种创建提前加载单例模式的可靠选项
 *
 * 目的: 保证只有一个对象只能有一个实例
 * 实现:
 * 1. 单个类组成
 * 2. 字段 & 构造器私有化
 * 3. 通过static方法实现全局访问
 * 缺点:
 * 存在线程安全问题
 * 
 * @author insight 
 * @since 2021/4/22
 */
public class Singleton {
    private static Singleton instance;

    private Singleton() {
        System.out.println("Singleton is Instantiated!");
    }

    /**
     * 判断实例是否存在
     * 是 直接返回
     * 否 新建返回
     */
    public static Singleton getInstance() {
        if (instance == null) {
            instance = new Singleton();
        }
        return instance;
    }
}